/**
                                                                                                          
                                                                                                          
                                                                                 _ _ _ _                  
                                                                 /              /       |                 
                                                               /  \            /      /                   
                                     /                       /     \          /      /                    
                             /      //                     /         \         |      /       _ _ _       
                              //   ///                    \            \       |     /       /     /      
                           //////////////////              \            \      |    /       /    /        
                     ////////////////////////////            \           /     \____/     /   /           
                 ///////....//////////////////////            \        /                  \/              
              /////////////////////////////.....//////           \    /                                   
            ////////////////////////////////////.///////            \/                  \                 
          /////.//////////////////...////////////////////                 -------        \  \             
         /////./...//.//////////////////////////////////////             |       | ------------           
        ///////////////////////////////////////////// //////             |-------|  ------ \              
       ///////////////////////////////// ///           //////            |       | -------- \             
      ////////////////////////////                      //////           |       |   -----   \            
     //////////////////////////                          /////           |-------|  |     |   \           
     /////////////////////////                      GGGGGGG  GGGGGGG     |       |  |  |  |    \          
     ////////////////////////                      GG       V     GG     |       |  |  |  |     \         
     ///////////////////////    GGGGGGG   GGGGGG  GG         .     GG    |       |  |  |  |      \        
     ///////////////////////   GG       V      GGGGG        ..    GG     |      \|  | / \ |       \ /     
     ///////////////////////  GG           ..   GG GG             G                  /   \                
     ///////////////////////  GG                G    GGG       GGG                                        
     ///////////////////////   GG             GG         GGGGGG                                           
     ///////////////////////     GGG       GGG              /                                             
    ////////////////////////        GGGGGG         ;       /                                              
    /////////////////////////                              /                       |                      
    /////////////////////////                            //                        |                      
   //////////////////////////                          //                    -------------|               
   ///////////////////////////                     ////  .Love              | ----------- |               
     ////////////////../////    //////////////// /  /   .                   |       |     |               
             /////                 /  /   /   /  / / / / . .. Love             -----|-----                
                                  /  /    /       /  /  .                           |                     
                                 /   /    /    //   /    ..Love             --------|----                 
                                /    /     ///     /  /                            |                      
                               /      /           /  /                        ---------                   
                              //       //     ///  /                         |         |                  
                              /          /////    /                          |         |                  
                             /                   /                            ---------                   
                            /                    /                                                        
                           /                     /                _ _                                     
                          /                      /               /   \     ___                            
                         /                       /              /   \     /   \                           
                        /                        /              \  /      |  |                            
                       /                         /               \/        \/                             
                      ////////////////////////////                            ---  -- -  --  -            
                            /         /    /     /                         -- --   ------ - ------- ---   
                            /         /     /    /           You're so good at it. [Chinese: nì hài]      
                                                                                                          
                                                                       --by Bootschool.net                
 */


/**
 * 文件的写入
 *     1.  1.1 同步的 底层 开发 写入 关闭    1.2简单的同步文件写入
 *     2.  2.1 异步的 底层 开发 写入 关闭    2.2简单的异步文件写入
 * 
 * cpu --->内存 ---->磁盘 ---->网络
 * 
 * cpu--->指令(磁盘去执行)
 * 
 * fopenSync 返回 fd  cpu 休息 睡觉
 * 
 * 异步 
 * fopen  没返回值，相对同步多个闭包函数
 * 
 * 
 *      
 * 文件的读取
 * 2.1 同步文件的读取
 *     
 *      
 */

let fs = require("fs");

/**
 * stat 文件的描述信息
 */

let info=fs.statSync('./openSync.txt');

//console.log(info);

/**
 * 在fs里面同步函数,函数名有sync的就是同步
 * 在fs里面异步函数是没有返回值，都是通过闭包去处理
 */
let fd=fs.openSync("./openSync.txt");
/**
 * fs.readSync(fd, buffer, offset, length, position)
 * fd 就是文件描述符
 * buffer buffer的对象
 * offset 偏移量
 * length 文件的读取长度
 * postition 位置
 * return number 读取的文件长度
 * 
 * bf[0]=11
 * bf[1]=22
 * 
 */
let bf = Buffer.alloc(info.size);
let result=fs.readSync(fd,bf,0,info.size);
/**
 * bf就是把内容读取进来
 */
//console.log(bf.toString());
/***
 * 关闭文件
 */

fs.closeSync(fd);
/**
 * 
 */
//console.log(result);

/**
 * 简单的同步文件读取,底层就是封装了 
 * fopenSync --readSync ---closeSync
 * fs.readFileSync(path[, options])
 * path 文件路径
 */

// let bf2=fs.readFileSync('./openSync.txt');
// console.log(bf2.toString());
let bf2=fs.readFileSync('./openSync.txt',{encoding:"utf8",flag:'r'});
//console.log(bf2.toString());


/**
 * 异步的文件读取
 * open
 * path:文件路劲
 * flag:标识 r  w  a
 * callback 
 * 
 */
let filePath='./openAsync.txt'
fs.open(filePath,'r',function(err,fd){
    let info=fs.statSync(filePath);
    let bf3=Buffer.alloc(info.size)
    // fs.readSync(fd,bf3,0,info.size);
    // console.log(bf3.toString());
    /**
     *  fd: number,
        buffer: TBuffer,
        offset: number,
        length: number,文件的长度
        position: ReadPosition | null,
        callback: (err: NodeJS.ErrnoException | null, bytesRead: number, buffer: TBuffer) => void
     */
    fs.read(fd,bf3,0,info.size,null,function(err,length,bf4){

        if(err){
            console.log(err);
        }else{
            //console.log(bf4.toString());
        }

    // fs.close(fd,function(err){

    // })    
        
    })
    
})

/**
 * 简单的异步文件读取
 * readFile
 * path:路劲
 * {
 * encoding
 * flag:r 在读取文件时，不能使用w 针对10.16.0版本
 * }

 */

fs.readFile('./openAsync2.txt',{encoding:'utf8',flag:'r'},function(err,string){
    if(err){
        console.log(err)
    }else{
        console.log(string)
    }
});


/**
 * 作业：
 * 1.先创建100个文件，文件内容自便，创建完以后呢，读取每一个文件，并且把每一个文件的内容拼接起来
 * 
 * //进阶可不教 2.先创建100个文件，随机写入数字，可以是整数，也可以是浮点，把最大值和最小值都取出来
 * 
 * 
 * 文件读取：
 * 
 *  readFileSync();简单同步的文件读取,返回值buffer
 * 
 *  readFile()； 简单的异步文件读取 callback里面返回(err,string)
 *
 * 
 */













